package ControleurBelote;


import java.util.LinkedList;
import java.util.Random;

public class TasDeCarte {

	private LinkedList<Carte> tas;
	private int nombreCarteMax;
	
	public TasDeCarte(int nombreCarte){
		tas = new LinkedList<Carte>();
		nombreCarteMax = nombreCarte;
	}
	
	public TasDeCarte(LinkedList<Carte> tas,int nombreCarte){
		this.tas = tas;
		nombreCarteMax = nombreCarte;
	}
	
	public Carte obtenirCarte(int carte){
		if(carte > tas.size() || carte < 0){return null;}
		if(!(tas.size() == 0)){
			Carte cart = tas.get(carte);
			enleverUneCarte(cart);
			return cart;
		}
		else{return null;}
	}
	
	public Carte[] obtenirPlusieurCarteSuivant(int debut , int nombreCarte){
		if( nombreCarte + debut > tas.size()){return null;}
		if(debut < 0){return null;}
		if(!(tas.size() == 0)){
			int i =0;
			Carte[] carte = new Carte[nombreCarte];
			while( i == nombreCarte){
				carte[i] = tas.get(debut+i);
				i++;
			}
			enleverPlusieursCarte(carte);
			return carte;
		}
		else{return null;}
	}
	
	public boolean ajouterUneCarte(Carte carte){
		if(carte == null){return false;}
		if( tas.size() + 1 >nombreCarteMax ){return false;}
		tas.add(carte);
		return true;
	}
	
	public boolean ajouterPlusieursCarte(LinkedList<Carte> carte){
		if(carte == null){return false;}
		if( tas.size() + carte.size() > nombreCarteMax ){return false;}
		tas.addAll(carte);
		return true;
	}
	
	public boolean enleverUneCarte(Carte carte){
		if(carte == null){return false;}
		if(nombreCarteMax == 0){return false;}
		int i = 0,k = 0;
		while(k == 0){
			
			if(tas.get(i).equals(carte)){
				tas.remove(i);
				k=1;
			}
			i++;
		}
		return true;
	}

	public boolean enleverPlusieursCarte(Carte[] carte){
		if(carte == null){return false;}
		if(nombreCarteMax == 0){return false;}
		if(carte.length > nombreCarteMax){return false;}
		int i = 0,k = 0,passe = 0;
		while(k == carte.length){
			passe = 0;
			while(passe == 0){
				if(tas.get(i).equals(carte)){
					tas.remove(i);
					k+=1;
					passe = 1;
				}
				i++;
			}
		}
		return true;
	
	}
	
	public void couleurDevientAtout(String couleur){
		int i =0;
		for(i = 0;i<tas.size();i++){
			if(tas.get(i).getCouleur().equals(couleur)){
				tas.get(i).devenirAtout();
			}
		}
	}
	
	
	public boolean melanger(){
		int i = 0,j = 0,nombre = 0,position = 0,posCarteN = 0;
		boolean  ok = true;
		Random r1 = new Random() ;
		LinkedList<Integer> valeur = new LinkedList<Integer>()
		,posCarte = new LinkedList<Integer>();
		
		while(i != 31){
			ok = true;
			nombre = 0;
			while(ok){		
				nombre = 0;
				posCarteN = r1.nextInt(31);
				for(j= 0 ; j<posCarte.size();j++){
					if(posCarte.get(j).intValue() == posCarteN ){
						nombre=1;
					}
				}
				if(nombre == 0){
					ok = false;
				}
			}
			posCarte.add(posCarteN);
			while(ok){		
				nombre = 0;
				position = r1.nextInt(31);
				for(j= 0 ; j<valeur.size();j++){
					if(valeur.get(j).intValue() == position || 
							position == posCarteN){
						nombre=1;
					}
				}
				if(nombre == 0){
					ok = false;
				}
			}
			valeur.add(position);
				Carte carte = tas.get(posCarteN);
				tas.remove(posCarteN);
				Carte carteA = tas.get(position);
				tas.remove(position);
				tas.add(position, carte);
				tas.add(carteA);
				i++;	
		}
		return true;
	}
	
	public LinkedList<Carte> getTas(){return tas;}

	public void setTas(LinkedList<Carte> tas){this.tas = tas;}
	
	public String toString(){
		int i =0;
		String chaine = "";
		for(i = 0;i<tas.size();i++){
			chaine += tas.get(i).toString()+ " \n ";
		}
		return chaine;
	}
	
	public boolean equals(Object o){
		int i = 0;
		boolean egalite = true;
		for(i=0;i<tas.size();i++){
			egalite &= tas.get(i).equals(((TasDeCarte)o).tas.get(i));
		}
		return egalite && nombreCarteMax == ((TasDeCarte)o).nombreCarteMax;
	}
}
